package cn.lcsjsxy.yxc.collections_framework.Collection;

import org.junit.jupiter.api.Test;

import java.util.*;

/**
 * Collections:操做Collection、Map的工具类
 *
 * 面试题：Collection和Collections的区别？
 */
public class CollectionsTest {
    /*
        排序操作
        reverse(List):反转List中元素的顺序
        shuffle(List):对List集合元素进行随机排序
        sort(List):根据元素的自然顺序对指定List集合元素按升降排序
        sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
        swap(List,int,int):将指定list集合中的i处元素和j处元素进行交换
        查找、替换
        Object max(Collection):根据元素的自然顺序，返回给定集合中的最大元素
        Object max(Collection,Comparator):根据Comparator指定的顺序，返回给定集合中的最大元素
        Object min(Collection)
        Object min(Collection,Comparator)
        int frequency(Collection,Object):返回指定集合中元素的出现次数
        void copy(List dest,List src):将src中的内容复制到dest中
        boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值
         */
    @Test
    public void test(){
        List list=new ArrayList();
        list.add(123);
        list.add(-123);
        list.add(23);
        list.add(-13);
        list.add(1234);
        System.out.println(list);

        //reverse(List):反转List中元素的顺序
        Collections.reverse(list);
        System.out.println(list);

        //shuffle(List):对List集合元素进行随机排序
        Collections.shuffle(list);
        System.out.println(list);

        //sort(List):根据元素的自然顺序对指定List集合元素按升降排序
        Collections.sort(list);
        System.out.println(list);

        //sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
        Collections.sort(list, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Integer&&o2 instanceof Integer){
                    Integer i1=(Integer) o1;
                    Integer i2=(Integer) o2;
                    return -i1.compareTo(i2);
                }else {
                    throw new RuntimeException("数据类型不匹配");
                }
            }
        });

        //swap(List,int,int):将指定list集合中的i处元素和j处元素进行交换
        System.out.println(list);
        Collections.swap(list,1,2);
        System.out.println(list);
    }

    @Test
    public void test1(){
        List list=new ArrayList();
        list.add(123);
        list.add(-123);
        list.add(23);
        list.add(-13);
        list.add(1234);

        //Object max(Collection):根据元素的自然顺序，返回给定集合中的最大元素
        Object max=Collections.max(list);
        System.out.println(max);

        //Object max(Collection,Comparator):根据Comparator指定的顺序，返回给定集合中的最大元素


        // Object min(Collection)
        Object min=Collections.min(list);
        System.out.println(min);

        //Object min(Collection,Comparator)


        //int frequency(Collection,Object):返回指定集合中元素的出现次数
        int i=Collections.frequency(list,123);
        System.out.println(i);

        //void copy(List dest,List src):将src中的内容复制到dest中
        List list1= Arrays.asList(new Object[list.size()]);
        Collections.copy(list1,list);
        System.out.println(list1);

        //boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值
        Collections.replaceAll(list,123,456);
        System.out.println(list);

        /*
        *Collections 类中提供了多个synchronizedXxx（）方法，该方法可使将指定集合包装成线程同步的集合，从而可以解决多线程并发访问集合时的线程安全问题
        */
        //返回的list2即为线程安全的
        List list2=Collections.synchronizedList(list);
    }
}
